package com.shp.service;

import com.shp.pojo.ResultInfo;
import com.shp.pojo.SystemMsg;
import com.shp.pojo.User;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpSession;
import java.util.List;

/**
 * @author ZWL
 */
public interface UserService {

    /**
     * 根据用户的id，查询用户信息
     * @param userId 用户id
     * @return User
     */
    public User getUserById(Integer userId);

    /**
     * 获取所有用户
     */
    public List<User> getAll();

    /**
     * 注册用户
     * @param user 用户信息
     * @param session 此次会话session
     * @param info 响应的信息
     * @return ResultInfo对象
     */
    public ResultInfo register(User user, HttpSession session, ResultInfo info);

    /**
     * 登录验证
     * @param user 用户信息
     * @param session 会话session
     * @return ResultInfo对象
     */
    public ResultInfo loginCheck(User user, HttpSession session);

    /**
     * 添加商品到购物车
     * @param id 商品id
     * @param request HttpServletRequest
     * @param info ResultInfo
     * @return ResultInfo
     */
    public ResultInfo addNotice(Integer id, HttpServletRequest request,ResultInfo info);

    /**
     * 忘记密码，产生随机密码，邮件发送新密码
     * @param email 用户邮箱
     * @param info 响应信息ResultInfo
     * @return 响应信息ResultInfo
     */
    public ResultInfo forgetPassword(String email,ResultInfo info);

    /**
     * 将商品添加到收藏夹
     * @param id 商品id
     * @param session 会话session
     * @param info 响应信息ResultInfo
     * @return ResultInfo
     */
    public ResultInfo collectionGoods(Integer id, HttpSession session,ResultInfo info);

    /**
     * 修改个人信息
     * @param user User
     * @return true代表修改成功，否则失败
     */
    public boolean updateUser(User user);

    /**
     * 获取系统信息
     * @return List<SystemMsg>
     */
    public List<SystemMsg> getSystemMsgList();

    /**
     * 根据条件，查询所有符合的User
     * @param user 条件如下：<br/>
     *          user.phone - 手机 <br/>
     *          user.userName - 昵称 <br/>
     *          user.email - 邮箱 <br/>
     *          user.status - 状态 <br/>
     *          user.registerFlag - 注册期限 <br/>
     * @return 查询成功返回List<User>集合；否则返回null
     */
    public List<User> getUserBySelect(User user);

    /**
     * 批量删除用户
     * @param userIds  用户id
     * @return true代表删除成功；否则删除失败
     */
    public boolean deleteUser(Integer[] userIds);
}
